package com.aoxin.mapper.course.systemCourse;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.aoxin.model.SlfUserCourseCondition;
import com.aoxin.model.course.AloneCoursePage;
import com.aoxin.model.course.SchoolCoursePage;
import com.aoxin.model.dto.SelectTreeDto;

public interface SchoolCoursePageDao {
	/**
	 * 查询某个学校的课程包
	 * 
	 * @param schoolCoursePage
	 * @return
	 */
	List<SchoolCoursePage> getSchoolCoursePage(SchoolCoursePage schoolCoursePage);

	/**
	 * 新建某个学校的课程包
	 * 
	 * @param schoolCoursePage
	 * @return
	 */
	Integer insertSchoolCoursePage(SchoolCoursePage schoolCoursePage);

	/**
	 * 修改某个学校的课程包
	 * 
	 * @param schoolCoursePage
	 * @return
	 */
	Integer updateSchoolCoursePage(SchoolCoursePage schoolCoursePage);
	
	void updateState(@Param("coursePageIds") List<Integer> coursePageIds,@Param("state") Integer state);
	
	Integer updateSchoolCoursePageOther(AloneCoursePage aloneCoursePage);
	/**
	 * 同一个学校 同一个类型 的课程包名称不能相同
	 * 
	 * @return
	 */
	Integer checkPage(@Param("schoolId") Integer schoolId, @Param("coursePageId") Integer coursePageId);

	/**
	 * 获取下一排序号
	 * 
	 * @return 排序号
	 */
	Integer getNextSequence(@Param("schoolId") Integer schoolId);

	/**
	 * 查询课程包树形下拉
	 * 
	 * @param partId
	 * @return
	 */
	List<SelectTreeDto> getCoursePageTreeList(@Param("partId") Integer partId);

	/**
	 * 根据课表Id查询学校课程包
	 * 
	 * @param syllabusId
	 * @return
	 */
	List<SchoolCoursePage> getSchoolCoursePageBySyllabusId(Integer syllabusId);

	/**
	 * 根据学校课程id查询学校课程包
	 * 
	 * @param courseId
	 * @return
	 */
	List<SchoolCoursePage> getSchoolCoursePageByCourseId(Integer courseId);

	/**
	 * 根据ID查询学校课程包
	 * 
	 * @param schoolCoursePageId
	 *            学校课程包ID
	 * @return 学校课程包
	 */
	SchoolCoursePage getSchoolCoursePageById(@Param("schoolCoursePageId") Integer schoolCoursePageId);
	/**
	 * 判断学校课程包是否重复--修改
	 * 
	 * @param schoolId
	 * @return
	 */
	Integer checkSchoolCoursePageinsert(@Param("schoolId") String schoolId, @Param("coursePageId") Integer coursePageId,@Param("name") String name);

	/**
	 * 查询库存中的课程包信息
	 * 
	 * @param courseId
	 * @return
	 */
	SchoolCoursePage getAloneCoursePage(@Param("coursePageId") Integer coursePageId);

	/**
     * 查询所有课程包(B类包)
     * @param 
     * @return List<AloneCoursePage>
     */
    List<SchoolCoursePage> getAloneCoursePages();
    
    /**
     * 查询所有课程包(C类包)
     * @param 
     * @return List<AloneCoursePage>
     */
    List<SchoolCoursePage> getAloneCoursePagesCtype(Integer chlidrenId);
    
    List<SchoolCoursePage> getAloneCoursePagesCtypeAll(@Param("startTime") String startTime,@Param("endTime") String endTime);
    
    /**
     * 查询下一级课程包
     * @param schoolCoursePageId
     * @return List<AloneCoursePage>
     */
    SchoolCoursePage getAloneCoursePagesNext(Integer schoolCoursePageId);
    /**
     * 找到上级包
     * @param schoolCoursePageId
     * @return List<AloneCoursePage>
     */
    Integer getAloneCoursePagesUp(Map<String,Object> map);
    
    /**
     * 找到上级包完成那个数量
     * @param schoolCoursePageId
     * @return List<AloneCoursePage>
     */
    Integer getAloneCoursePagesUpCount(Map<String,Object> map);
    
    /**
     * 判断上级包是否存在
     * @param schoolCoursePageId
     * @return List<AloneCoursePage>
     */
    Integer getAloneCoursePagesUpOther(Integer parentId);
    
    /**
     * 根据教室查询课程包
     * @param classroomId
     * @return List<SchoolCoursePage>
     */
    List<SchoolCoursePage> getSchoolCoursePages(Integer classroomId);
    
    
    //找到包类名字
    String courseName(Integer schoolCoursePageId);
    
    void insertSchoolCoursePageOther(AloneCoursePage aloneCoursePage);
    
    //获取最大自增Id
    Integer getMax();
    
    List<SchoolCoursePage> getCoursetheme(String courseTime);
    
    //查询已购买的课程
    List<SchoolCoursePage> getChildrenCourser(Map<String,Object> map);
    
    
    List<SchoolCoursePage> getChildrenMyCourseAll(Map<String,Object> map);
    
    //查询未购买的课程
    List<SchoolCoursePage> getChildrenCourserNo(Map<String,Object> map);
    
    //找到该孩子是否购买该班级的课程
    Integer getChildrenCourserCount(Map<String,Object> map);
    
    //查询C类课程的信息
    Map<String,Object> getCourseMessage(Integer courseId);
    
    //查看C类上课记录
    List<SchoolCoursePage> getChildrenCourseAlready(Integer childrenId);
    
    //查出C类课程
    List<SchoolCoursePage> getCourseConditionTimeC(Map<String,Object> map);
    
    List<SchoolCoursePage> getCourseConditionTimeCClassroom(Map<String,Object> map);

    //判断是否绑定包
    Integer IsBindingPackage(Integer schoolId);
    
}
